package clickhouse.service;

import clickhouse.service.impl.ClickHouseWrap;

import java.util.List;
import java.util.Map;

/**
 * @author 王龙海
 * @version 1.0.1
 * @Date 2021-01-12
 * @description 操作ClickHouse对外接口
 */
public interface IClickHouseOperation {
    /**
     * 获取数据库代理
     * @return
     */
    ClickHouseWrap getClickHouseWrap();

    /**
     * 关闭数据库
     * @param clickHouseWrap 数据库对象
     */
    void closeDataBase(ClickHouseWrap clickHouseWrap);

    /**
     * 批量插入数据
     * @param clickHouseWrap 数据库对象
     * @param tableName 表名
     * @param fieldValues 数据
     */
    void batchInsertData(ClickHouseWrap clickHouseWrap,String tableName,List<Map<String, Object>> fieldValues);

    /**
     * 插入单条数据
     * @param clickHouseWrap 数据库对象
     * @param tableName 表名
     * @param fieldValues 数据
     */
    void insertData(ClickHouseWrap clickHouseWrap,String tableName,Map<String, Object> fieldValues);
    /**
     * 批量插入数据
     * @param tableName 表名
     * @param fieldValues List<Map<字段名，字段值>>
     */
    void batchInsertData(String tableName,List<Map<String,Object>> fieldValues);

    /**
     * 向指定表插入一条数据
     * @param tableName 表名
     * @param values Map<字段名，字段值>
     */
    void insertData(String tableName,Map<String,Object> values) ;
    /**
     * 根据sql查询数据
     * @param sql 示例：select deivce_id,metric from metrics where rownum=1
     * @return
     */
    List<Map<String, Object>> getListMapFromSql(ClickHouseWrap clickHouseWrap,String sql) ;
    /**
     * 根据sql查询数据
     * @param sql 示例：select deivce_id,metric from metrics where rownum=1
     * @return
     */
    List<Map<String, Object>> getListMapFromSql(String sql) ;
    /**
     * 删除数据
     * @param tableName 表名
     * @param clause where 后面的条件
     * @return 1 执行成功，-1执行失败
     */
    int deleteData(ClickHouseWrap clickHouseWrap,String tableName,String clause);
    /**
     * 删除数据
     * @param tableName 表名
     * @param clause where 后面的条件
     * @return 1 执行成功，-1执行失败
     */
    int deleteData(String tableName,String clause);
    /**
     * 修改数据（mergetree引擎）
     * @param tableName 表名
     * @param updateValues 修改内容，字段名与字段值键值对
     * @param clause where 后面的条件
     * @return 1 执行成功，-1执行失败
     */
    int updateData(ClickHouseWrap clickHouseWrap,String tableName,Map<String,Object> updateValues,String clause);
    /**
     * 修改数据（mergetree引擎）
     * @param tableName 表名
     * @param updateValues 修改内容，字段名与字段值键值对
     * @param clause where 后面的条件
     * @return 1 执行成功，-1执行失败
     */
    int updateData(String tableName,Map<String,Object> updateValues,String clause);
}
